Особенности:
- Это не сниппет, это самодостаточный скрипт.
- Использует процессоры для импорта ресурсов и изображений.
- Умеет обновлять ресурсы по указанному ключевому полю.
- Поддерживает ТВ параметры и поля товаров, включая JSON типа size и color.
- Есть режим отладки, с подробным логом и обработкой только первой строки файла.
- Выводит сообщения через системный лог.
Скрипт входит в состав miniShop2 с версии 2.1.4 и лежит в /core/components/minishop2/import/csv.php. Запускать его можно как из браузера (если у вас открыта директория core), так и из консоли.
Если захотите его перенести в другое, более подходящее место, то нужно отредактировать строку
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config/config.inc.php';и указать другой путь для получения config.inc.php.
Если вы запускаете скрипт из core, и вообще, если у вас открыта core всем гостям — то вы сам себе злобный буратина. Это небесопасно, я вас предупредил!
Параметры
Параметры можно указывать двумя путями: через командную строку и через массивы $_GET или $_POST- file — путь к импортируемому файлу, от корня сайта. Например «core/import/file.csv»
- fields — строка с полями испортируемого файла.
Здесь нужно перечислить имена, как они идут в файле. Например: «alias,article,pagetitle,price,image,discount».
В параметре и файле можно использовать не только поля ресурса, но и:
- Массивы свойств товара: «size,size,size,color,color»
- Изображения для галереи: «gallery,gallery,gallery»
- ТВ параметры (слово «tv» + id параметра): «tv1,tv2,tv3»
- update — указывает, нужно ли обновлять ресурсы. Значения 1 или 0.
- key — если включено обновление, обязательно нужно указать ключ товара, по которому определяется его уникальность. Например «article».
- debug — Режим отладки. Если = 1, то скрипт подробно обрабатывает первую строку файла и выходит.
- delimeter — Разделитель колонок в csv файле, по умолчанию ";".
Примеры
Импорт через консоль:php ./core/components/minishop2/import/csv.php "file.csv" "article,pagetitle,tv1,size,size,gallery,gallery,tv3" 1 "article" 1 "|"Импорт через браузер
http://mysite.com/core/components/minishop2/import/csv.php?file=file.csv&fields=article,pagetitle,tv1,size,size,gallery,gallery,tv3&update=1&key=article&debug=1&delimeter=|В конце работы скрипт выведет статистику и ошибки, если есть.
Наверх, в раздел
Импорт и экспорт
Импорт и экспорт
Наверх, в раздел
Импорт и экспорт
Импорт и экспорт

Но мне кажется это очень сложновато будет для клиентов ;)
Построил сайт, настроил импорт, добавил в cron и скачал клиенту, куда класть файл.
Ну или написал свою простенькую обвязку для загрузки.
А для клиентов когда-нибудь сделаю отдельный компонент.
Есть вопрос по импорту товаров из CSV.
Как создается alias для товара при обновлении? Я так понимаю, что это процессор делает? Дело в том, что после запуска скрипта алиасы на категориях товаров переписались из транслита в обычные с русскими буквами.
Дружественные УРЛ на сайте настроены.
Установлен ytranslit.
Что нужно поправить в скрипте (или может, еще где) чтобы алиасы все же транслитом прописывались.
Благодарю за ответ.
1. В файле порядка 3000 товаров. 90% из них — уже существующие в каталоге minishop2.
2. Где-то тут на сайте читал, что алиасы генерируются только при создании ресурса, но не при обновлении.
3. Если я проводил импорт 3-4 раза за вчерашний день (отлаживал) и новых объектов порядка 10%, то по-любому я не мог перевалить за лимиты Яндекса…
Отсюда вопрос к Василию — подскажите пожалуйста, где посмотреть, чтобы убедиться, что при update товара действительно не происходит обращения к Яндексу?
Спасибо.
Василий а родитель где лежат товары указываем в файле и в параметре fields=parent?
Можно указывать абсолютно любые поля ресурса, включая class_key и context_key.
Это именно то, что я очень давно жду. Сделано супер, Василию огромное спасибо!
Кэш чистил. Толку ноль. Сохранил товар — галочка включилась, товар нарисовался в дереве.
На моих сайтах, понятно, все в порядке.
Запускаю из браузера так:
Получаю это.
Пробовал в Хроме — создаются товары, но импортируется только цена. В мозиле вообще ничего не импортируется
Что я делаю не так?
Все равно ошибка появляется
Что это означает?
И можете объяснить как картинки загружать?
Я так понял, в файле делаем несколько колонок gallery (если картинок несколько), в которые имена картинок вставляем. А сами картинки куда заливать?
Картинки нужно предварительно залить на сервер и пути в файле указать к ним от корня сайта.
По картинкам понял, Спасибо!
А шаблон главной почему применяется?
Шаблон применяется «по умолчанию», так как ты не указал его в файле. Добавь в файл поле template и пропиши туда нужный id.
Я просто свой парсер написал для минишопа2 правда для xml. Пришлось написать bash скрипт который в цикле запускает php для обработки одной записи.
Если указать tv, то товары новые создаются, а не обновляются.
И еще возник вопросик:
Как удалить сразу все товары (или часть), например 3000 шт.?
У меня какой то слабый хостинг, при удалении ~ 100 шт. все падает, большая нагрузка на cp.
Удалял строки в бд — но на сайте все по прежнему отображается.
Еще не забудь почистить таблицу со значениями ТВ, это modx_tmplvars_contentvalues.
И проблема с импортом текстовых полей на русском — их не подтянуть корректно, подозреваю что проблема в файле импорта либо в моих руках)) — если проблема с кодировкой то в полученных кракозябах попадается (delimetr) и сыпет ошибками.
Проблема кодировок — это всегда проблема хостинга.
Добавь авторизацию под нужным юзером.
в csv это будет соответствовать imgurl1;imgurl2 — локальные пути до картинок.
Я к примеру просто скопировал папку состарого сайта с изображениями и указываю пути к оригиналам и все подтягивается
Есть магазин, в связке —джумла + virtuemart с авто синхронизацией каталога поставщика, формирует весь контент файл (http://www.site.ru/catalog.htm) с сервера поставщика. Возможно ли реализовать подобное в miniShop2?
С корня нашего сайта cron периодически запускает файл, и дальше видимо происходит парсинг /.../htdocs/import/index.php
в урле пишу:
**/modx/core/components/minishop2/import/csv.php?file=03_02_20140.csv&fields=gallery,pagetitle,article,tv1,tv2,popular,tv3,introtext,content,price,tv4,tv5&update=1&key=pagetitle&debug=1&delimeter=|
пробовал и просто левые колонки писать, и просто ,,
в итоге допустим вижу:
т.е. якобы импорт произведён, но в БД вижу только новую строку с id, не тайтла, ни контента — ничего, что я делаю не так?
хотя допустим с таким:
dl.dropboxusercontent.com/u/59666091/03_02_2014.csv вроде всё гуд, но только для первой строки, где в коде символ строки можно найти? $delimeter = @$_REQUEST['delimeter']; — это для ячеек, а для строки?
хотя чего не портируются тайтлы и тд хз)
debug=1 ограничивает кстати до одной записи, не сразу вник в написанное Василием ))
что именно вы имеете ввиду? в csv.php допустим для ключа gallery дописать там допустим «folder/».?
$file = str_replace('//', '/', MODX_BASE_PATH. $file);
?
где там ещё сорс, что то не вижу(
Source — это id источника файлов товара, это свойство товара и его можно добавить в csv, чтобы было ясно, как этому товару загружать картинки.
Это даже в заметке написано
Кто бы читал?
есть в csv колонка с именем файла, в корне есть все эти файлы (только для импорта, потом их удаляю)
в итоге в корне получаю кучу папок. " id медиа источника source" что это? дописать в каждом csv файле id = source? а в урле вызова скрипта, как обозвать эту колонку правильно?
сходи на stackoverflow, там наверное вообще улетишь от количества тупых(по твоему мнению) вопросов?
с тобой реально — ну невозможно разговаривать, ты такого уже высокого о себе мнения…
ну не хочешь помогать, ну не помогай, просто проигнорь, нет же, надо ляпнуть гадость
думать буду сам, и придумаю, и нафиг больше ничего у тебя не спрошу, господин задратыйвверх нос.
ты думаешь что создал офигенную документацию? нет!
И что ты мне на это скажешь? Опять, что я «дурак», читать лень-влом?
Включать мозги нужно, хоть иногда. Поменьше спрашивать, побольше думать и эксперементировать.
Если тебе не нравится, как я общаюсь — никто не заставляет. Будь здоров, Паша.
Нужно просто обновить компонент.
Меня если спрашивают — я отвечаю, как умею. Игнорировать вопросы на собственном сайте как минимум странно.
могу ошибаться правда, но провеьте по документации
Все счасьте
P.S. Буду весьма благодарен если найдутся люди готовые помочь мне сделать нормальный импорт и интеграцию свойств товара за вознаграждение. mishmashdash[dog]gmail.com
Экспорт\импорт давно в планах, но пока никак.
И даже приблизительно не знаю.
Первый товар импортируется, второй уже без картинки, последующие не импортируются вообще, скрипт не выдает никаких сообщений. Как быть с проблемой?
Так запускаем скрипт — sajo.ru/core/components/minishop2/import/csv.php?file=core/import/vigruzka.csv&fields=price,pagetitle,vendor,article,size,inset,technic,kanva,kanva_color,picture_type,prod_type,gallery,availability,parent,template,base,alias,published&update=0&key=alias&debug=0&delimeter=|
Вот лог из режима debug:
CSV файл выглядит так:
импортируется только первый товар. все остальные нет. Подскажите или может я что то не так делаю?
Можно ли при импорте указать к какой категории относится каждый товар или хотя бы все импортируемые товары?
Указав id категории или еще как-нибудь…
Можно ли указать товарам поле content_type со своим типом содержимого?
Хочу назначить артикул в качестве алиаса, и формировать адрес без .html
(подозреваю что можно, но, надеюсь, что за спрос не побьють)
Василий создал отменный скрипт!
Файлы пробовал грузить и в UTF-8 и в ANSI, и в KOI8-R(ну мало ли)
И все русские символы терялись. Заглянул в исходники, понял что теряется на вот этом этапе
И вспомнил, что уже когда-то сталкивался с подобной проблемой. И с чем связана она я не помню.
И пришлось заменить на такую конструкцию
Оно выглядит не так красиво, но зато русские символы не теряются.
Так же я протестировал вот таким образом, на файле в 16000 строк.
Результаты удивили
Это так просто информация, ну и может предложение заменить конструкцию немного.
Перетащил в assets/import/csv.php изменив в файле строку к конфигу:
Файл с полями и картинки в assets/import/. В итоге «белая страница» импорта. Сам запрос:
параметр &debug=1 ничего также не показывает. Подскажите где копать?
Есть такие параметры, которые выбираются вручную в админке и не хотелось бы затирать их при импорте.
Подскажите как указать TV для игнорирования?
захожу в админку смотрю что там нет не каких изменений, как создавал 2 товара вручную так они и остались.
Подскажите в чем дело.
Лично что мне в голову пришло.
1) Редактируем csv файл, скажем добавляем колонку в начало с указанием id parent… В принципе если все импортировать в 1 каталог то это займет секунд 20 даже если товара будет 5000
2) Заходим в phpMyAdmin и находим таблицу (префикс который вы указывали при установки)_site_content.
и заменяем там значение parent наших товаров… Из минусов лично я не нашёл как массово редактировать колонку. В итоге может быть все довольно долго.
И подскажите есть еще какие способы указать parent?
1) Например изменить что то в csv.php
2) В указать самому вроде такого возможно так сделать? чтоб parent присваивалось значение которые мы указали, а дальше все по сценарию бралось из таблицы…
Подскажите если не трудно, а то я только Верстальщик, и с программированием пока совсем не дружу.
Столкнулся с проблемой. Через адресную строку файл импортируется нормально. А через консоль не хочет. Выдается ошибка Вызывал так: В импортируемом файле 7050 позиций. Ngnix хостера выдает 504 ошибку через 400 позиций. Понимаю что файл можно разбить на части, но при обновлении цен поставщика это будет не удобно. Кто-то находил решение такой проблемы?
Спасибо
Нужно делать импорт из нормальной консоли сервера, куда обычно можно попасть через ssh.
Тут много сложностей и низкая скорость работы.
Или это связано с MODx 2.3? (сейчас импортирую на него).
С debug, получаю это:
В csv файле 3 колонки: article,gallery,sourse
До этого, много раз импортировал на др. сайтах, а здесь затык.
Подскажите, в чем проблема может быть?
Хочется проставлять эти галочки в CSV. Полагаю как то так?
tree, tree,...(неизвестное название поля)
1, 16,… (ID нужной категории)
Какая должна быть минимальная структура csv для импорта? А то я не как не могу понять как правильно составить csv
Заранее спасибо!
Я-то сначала тож обрадовался, понял как контекст указать и тв в виде чекбоксов и родителей, шаблон и показ в дереве. Разобрался с кодировкой, разделителями, спецсимволами. Ну, думаю, ляпота…
Попробовал, вроде работает. А когда дошло дело до реального импорта, то дальше второй строки он не идет.
Подскажите, в чем проблемка?
Если debug=1 — всё норм.
При update=0 — приходится обовлять страницу столько раз, сколько строк в csv, отображается кол-во строк.
А при update=1 — вообще ничего не отображается. Но можно заметить, что импорт произошел и были использованы только две первые строчки, и усё…
CSV сделал простейший:
2;title1
2;title2
2;title3
мойсайт.ru/core/components/minishop2/import/csv.php?file=/import/items.csv&fields=parent,pagetitle&update=1&key=pagetitle&debug=0&delimeter=;
хотел опробовать всё тоже самое не тестовом хостинге от simpledream, но папка core там закрыта, а как выполнить импорт через консоль я так и не въехал, ибо вижу только php: command not found
У кого-то, возможно, такая же хрень будет, а он прочитает мои буковки и на него просветление снизойдет.
В общем, молодец, что разобрался.
Основной картинкой становится первое изображение. Его через этот скрипт никак не заменишь.
Основной становится первая картинка (поле rank), обновление проводит метод updateProductImage. То есть, тебе нужно сначала верно отсортировать картинки, а потом вызвать этот метод.
Подскажите, пожалуйста, почему может не работать импорт, если нет варнингов и эроров в логе.
Вот такой вывод: pastebin.com/n5squx3q
Прежде чем импортировать на живом сайте, решил попробовать на тестовом сайте. Но что-то никак не работает. Вызываю скрипт так: s640.h3.simpledream.ru/csv.php?file=import.csv&fields=article,parent,pagetitle,price,content&update=1&key=article&debug=1